home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 4
/
FM Towns Free Software Collection 4 - Disc 1.iso
/
pao
/
towns
/
paolib
/
rbios.asm
< prev
next >
Wrap
Assembly Source File
|
1991-10-18
|
4KB
|
141 lines
;==============================================================================
; << 386ASM V2.0 >> for FM TOWNS
;==============================================================================
.386p
PAGE 60,132
NAME RBIOSCALL
TITLE REAL BIOS CALL PROCEDURE
;==============================================================================
; リアルBIOSコール
;
; CREATE : 1990.03.17
; FINISH : 1990.03.17
;
; < note > : TABS = 4
;
; < History >
; 1990.03.17 : CREATE
; 1991.04.23 : 清書
;
; Programmed by Y.Hirata ( Nifty-ID : NAB03321 )
;==============================================================================
;
INCLUDE hc.inc ;
;
CGROUP GROUP pmcode, CODE ;
DGROUP GROUP pmdata, DATA ;
;
;--------------------------------------------
public Make_bufs ; リアル-ネイティブ用バッファ確保
public RBIOS_call ; リアルBIOS呼出し
public RBIOS_rmseg ; リアルセグメント
public RBIOS_rmoff ; リアルオフセット
public RBIOS_pmseg ; ネイティブセグメント
public RBIOS_pmoff ; ネイティブオフセット
;--------------------------------------------
;
;////////////////////////////////////////////
; ネイティブ部
;////////////////////////////////////////////
;
;********************************************
; リアル/ネイティブ通信用データ領域
;********************************************
pmdata SEGMENT ;
ASSUME ds:DGROUP ;
;
RBIOS_rmseg DD ? ; REAL MODE DATA SEGMENT
RBIOS_rmoff DD ? ;
RBIOS_pmseg DD ? ; PROTECTED MODE DATA SEGMENT
RBIOS_pmoff DD ? ;
;
pmdata ENDS ;
;
pmcode SEGMENT ;
ASSUME cs:pmcode ;
;
;********************************************
; 共通ルーチン
;********************************************
;--------------------------------------------
; リアルBIOS呼出し準備
;--------------------------------------------
ALIGN 4 ; dword boundary
Make_bufs PROC NEAR ;
push eax ;
push ebx ;
push ecx ;
push edx ;
push es ;
;
mov ax,250Dh ;
int INT_DOS ;
mov word PTR RBIOS_rmoff,bx ; データバッファのリアルモードアドレス
shr ebx,16 ; 16bit right shift
mov dword PTR RBIOS_rmseg,ebx
; リアルモードセグメント
mov dword PTR RBIOS_pmoff,edx
; データバッファのネイティブアドレス
mov ax,es ;
mov word PTR RBIOS_pmseg,ax ; ネイティブモードセグメント
;
pop es ;
pop edx ;
pop ecx ;
pop ebx ;
pop eax ;
ret ;
Make_bufs ENDP ;
;
RMINT STRUC ;
RMI_INUM DW ? ; INTERRUPT NUMBER
RMI_DS DW ? ; REAL MODE DS
RMI_ES DW ? ; REAL MODE ES
RMI_FS DW ? ; REAL MODE FS
RMI_GS DW ? ; REAL MODE GS
RMI_EAX DD ? ; EAX
RMI_EDX DD ? ; EDX
RMINT ENDS ;
;
;--------------------------------------------
; リアルBIOSの呼出し
;--------------------------------------------
ALIGN 4 ; dword boundary
RBIOS_call PROC NEAR ;
#INTNO EQU (word PTR 8[ebp]) ; INTERRUPT NUMBER
#RMDS EQU (word PTR 12[ebp]) ; DS (REAL MODE)
#RMES EQU (word PTR 16[ebp]) ; ES (REAL MODE)
#RMI EQU (dword PTR [ebp - (size RMINT)])
;
push ebp ;
mov ebp,esp ;
sub esp,size RMINT ; ローカル変数の割り当て
;
mov #RMI.RMI_EAX,eax ; EAX
mov #RMI.RMI_EDX,edx ; EDX
mov ax,#RMDS ;
mov #RMI.RMI_DS,ax ; DS
mov ax,#RMES ;
mov #RMI.RMI_ES,ax ; ES
mov ax,#INTNO ;
mov #RMI.RMI_INUM,ax ; F-BIOS割り込み番号
push edx ;
push ds ; リアルモード割り込みの発行
mov ax,ss ; DS:EDX = 割り込みデータブロック
mov ds,ax ;
lea edx,#RMI ;
mov ax,2511h ; 割り込みの発行
int INT_DOS ;
pop ds ;
pop edx ;
;
add esp,size RMINT ;
pop ebp ; レジスタ復帰~終了
ret ;
RBIOS_call ENDP ;
;
pmcode ENDS ;
;
END